<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------

namespace Addons\Attachment\Model;

use Think\Model;

/**
 * 分类模型
 */
class AttachmentModel extends Model
{
    /**
     * 附件模型自动完成
     * @var array
     */
    protected $_auto = array(
        array('uid', 'session', self::MODEL_INSERT, 'function', 'user_auth.uid'),
        array('download', 0, self::MODEL_INSERT),
        array('sort', 0, self::MODEL_INSERT),
        array('create_time', NOW_TIME, self::MODEL_INSERT),
        array('update_time', NOW_TIME, self::MODEL_BOTH),
        array('status', 1, self::MODEL_BOTH),
    );

    protected function _after_find(&$result, $options)
    {
        $result['update_time_text'] = date('Y-m-d H:i:s', $result['update_time']);
        //$result['document_title'] = D('Document')->getFieldById($result['record_id'], 'title');
        $result['size'] = format_bytes($result['size']);
    }

    protected function _after_select(&$result, $options)
    {
        foreach ($result as &$record) {
            $this->_after_find($record, $options);
        }
    }

    /**
     * 保存文件附件到数据库
     * @param  string $title 附件标题
     * @param  array $file 文件数据
     * @param  number $record 关联记录ID
     * @param  integer $dir 是否为目录
     * @return boolean
     */
    public function saveFile($title, $file, $record, $dir = 0)
    {
        $data = array(
            'title' => $title,
            'type' => 2,
            'source' => $file['id'],
            'record_id' => $record,
            'dir' => $dir,
            'size' => $file['size'],
        );

        /* 保存附件 */
        if ($this->create($data) && $this->add()) {
            return true;
        } else {
            return false;
        }
    }

    public function saveDir()
    {

    }

    /**
     * 下载附件
     * @param  number $id 附件ID
     * @return boolean    下载失败返回false
     */
    public function download($id)
    {
        $info = $this->field(true)->find($id);
        if ($info && $info['status'] == 1) {
            /* 下载附件 */
            $this->downloadId = $id;
            switch ($info['type']) {
                case 0:
                    //TODO: 下载目录？
                    break;
                case 1:
                    //TODO: 下载外部附件
                    break;
                case 2:
                    $File = D('File');
                    $root = C('ATTACHMENT_UPLOAD.rootPath');
                    $call = array($this, 'setDownload');
                    if (false === $File->download($root, $info['source'], $call, $id)) {
                        $this->error = $File->getError();
                    }
                    break;
                default:
                    $this->error = '无效附件类型！';
            }
        } else {
            $this->error = '附件已删除或被禁用！';
        }
        return false;
    }

    /**
     * 新增下载次数（File模型回调方法）
     */
    public function setDownload($id)
    {
        $map = array('id' => $id);
        $this->where($map)->setInc('download');
    }

}